import logging

import pymysql

from common.logging_util import init_log_config
from config import ihrm_log


class DB(object):

    # 定义类属性【本质上就是一个变量】
    conn = None

    # 定义类方法，实现创建链接
    # 在方法名前面加上 __ 那么就成为了类的私有方法
    @classmethod
    def __get_conn(cls):
        # 首先判断链接是否已经存在，如果存在，就不需要再次创建了
        # conn 是类属性，使用类属性，必须在前面加上cls
        if cls.conn is None:      # is None 表示这个变量中的值是None
            cls.conn = pymysql.connect(user="student",
                            password="iHRM_student_2021",
                            host="211.103.136.244",
                            db="ihrm",
                            charset="utf8",
                            port=7061)
        return  cls.conn

    # 定义类方法，实现关闭链接
    @classmethod
    def __close_conn(cls):
        if cls.conn is not None:
            cls.conn.close()
            cls.conn = None

    # - 定义类方法，实现查询操作 1 条数据
    @classmethod
    def select_one(cls, sql):
        cursor = None
        res = None
        try:
            # 1：创建链接
            # __get_conn() 这是一个类方法，调用的时候需要在前面加上 cls.
            conn = cls.__get_conn()
            # 2：创建游标
            cursor = conn.cursor()
            # 3：执行sql命令：执行查询语句
            cursor.execute(sql)
            res = cursor.fetchone()
        except Exception as msg:
            print("执行错误: ",msg)
        finally:
            # 4：关闭游标
            cursor.close()
            # 5：关闭链接
            cls.__close_conn()
            # 返回执行结果
            return res

    # - 定义类方法，实现增删改操作
    @classmethod
    def idu_sql(cls, sql):
        conn = None
        cursor = None
        try:
            # 1：创建链接
            conn = cls.__get_conn()
            # 2：创建游标
            cursor = conn.cursor()
            # 3：执行sql命令
            cursor.execute(sql)
            conn.commit()
            #print("影响的行数：",conn.affected_rows())
            init_log_config(ihrm_log)
            logging.debug("影响的行数：",conn.affected_rows())
        except Exception as msg:
            print("执行错误: ",msg)
            conn.rollback()
        finally:
            # 4：关闭游标
            cursor.close()
            # 5：关闭链接
            cls.__close_conn()


if __name__ == "__main__":
    data = DB.select_one("select * from students limit 1")
    print(data)
    DB.idu_sql("delete from students where age>50")